﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Descriptions_DomainModel.Model;
using antlr;

namespace CommonClasses.Services
{
    /// <summary>
    /// Сервис, организующий работу с библиотесными функциями - создание, JIT-компиляцию
    /// </summary>
    public interface IFunctionManager
    {
        /// <summary>
        /// Подготовить ф-ю с данным именем к исполнению - осуществить её компиляцию и зарегистрировать переменную её состояния
        /// </summary>
        /// <param name="functionName">Имя функции</param>
        void RegisterFunction(string functionName, string parameters);

        /// <summary>
        /// Создать новую функцию
        /// </summary>
        /// <returns>Ошибки компиляции данной ф-ии</returns>
        List<Exception> DefineFunction(Antlr.Runtime.IToken name, string body);

        /// <summary>
        /// Удалить из библиотеки все динамически объявляемые функции
        /// </summary>
        void ClearLibrary();

        /// <summary>
        /// Указать менеджеру ф-ий, с каким описанием работать
        /// (пространство имен)
        /// </summary>
        /// <param name="domainModel">Описание оборудования</param>
        void InitializeDM(DomainModel domainModel);
    }
}
